package cn.wolfcode.luowowo.article.service;

import cn.wolfcode.luowowo.article.domain.Travel;
import cn.wolfcode.luowowo.article.domain.TravelContent;
import cn.wolfcode.luowowo.article.query.TravelQuery;
import cn.wolfcode.luowowo.member.domain.UserInfo;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * @author 猫教授
 * @date 2019/8/11 23:01
 */
public interface ITravelService {

    /**
     * 多条件范围查询
     * @param qo
     * @return
     */
    PageInfo<Travel> selectForList(TravelQuery qo);

    /**
     * 保存或编辑游记
     * @param travel
     * @return
     */
    Travel saveOrUpdate(Travel travel, UserInfo userInfo);

    /**
     * 通过ID查询游记
     * @param id
     * @return
     */
    Travel selectTravelById(Long id);

    /**
     * 通过游记简介查询游记内容
     * @param travelId
     * @return
     */
    TravelContent getContent(Long travelId);

    /**
     * 查询阅读量前三的页面
     * @param destId
     * @return
     */
    List<Travel> selectTravelsByDestIdNumTop3(Long destId);

    /**
     * 后台游记管理之列表查询
     * @return
     */
    PageInfo<Travel> getList(TravelQuery qo);

    /**
     * 后台审核修改游记状态
     * @param id
     * @param state
     */
    void updateState(Long id, Integer state);

    /**
     * 游记评论数增加
     * @param travelId
     * @return
     */
    int addReplynumByTravelId(Long travelId);

    /**
     * 获取单个游记游记对象
     * @param id
     * @return
     */
    Travel get(Long id);

    /**
     * 查询所有的的游记
     * @return
     */
    List<Travel> selectAll();

    /**
     * 通过查询对象查询列表// 首页查询游记使用
     * @param travelQuery
     * @return
     */
    PageInfo<Travel> selectList(TravelQuery travelQuery);

    /**
     * 查询当前用户的游记
     * @param id    当前用户Id
     * @return  用户的游记列表
     */
    List<Travel> getTravel(Long id);

    /**
     * 分页查询游记信息,额外写了一条SQL
     * @param qo
     * @return
     */
    PageInfo query(TravelQuery qo);

    /**
     * 查询当前用户的游记数
     * @param id    用户id
     * @return  游记数
     */
    int getCount(Long id);
}
